/*
 * Ant Group
 * Copyright (c) 2004-2024 All Rights Reserved.
 */
package com.alipay.zmdepositdemo.model;

import com.alipay.api.domain.OpenApiRoyaltyDetailInfoPojo;
import com.alipay.api.domain.RefundGoodsDetail;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.util.List;

/**
 * @author zhangjian
 * @version TradeRefundModel.java, v 0.1 2024年07月04日 18:03 zhangjian
 */
public class TradeRefundModel implements Serializable {

    private static final long serialVersionUID = 4288492628162914341L;

    /**
     * 退款金额。
     * 需要退款的金额，该金额不能大于订单金额，单位为元，支持两位小数。
     * 注：如果正向交易使用了营销，该退款金额包含营销金额，支付宝会按业务规则分配营销和买家自有资金分别退多少，默认优先退买家的自有资金。
     * 如交易总金额100元，用户支付时使用了80元自有资金和20元无资金流的营销券，商家实际收款80元。如果首次请求退款60元，则60元全部从商家收款资金扣除退回给用户自有资产；
     * 如果再请求退款40元，则从商家收款资金扣除20元退回用户资产以及把20元的营销券退回给用户（券是否可再使用取决于券的规则配置）。
     */
    @ApiModelProperty(value = "退款金额", example = "200.12", required = true)
    private String refundAmount;

    /**
     * 商户订单号。 订单支付时传入的商户订单号，商家自定义且保证商家系统中唯一。与支付宝交易号 trade_no 不能同时为空。
     */
    @ApiModelProperty(value = "商户订单号", example = "20150320010101001", required = false)
    private String outTradeNo;

    /**
     * 支付宝交易号。 和商户订单号 out_trade_no 不能同时为空，两者同时存在时，优先取值trade_no
     */
    @ApiModelProperty(value = "支付宝交易号", example = "2014112611001004680073956707", required = false)
    private String tradeNo;

    /**
     * 退款原因说明。 商家自定义，将在会在商户和用户的pc退款账单详情中展示
     */
    @ApiModelProperty(value = "退款原因说明", example = "正常退款", required = false)
    private String refundReason;

    /**
     * 退款请求号。
     * 标识一次退款请求，需要保证在交易号下唯一，如需部分退款，则此参数必传。
     * 注：针对同一次退款请求，如果调用接口失败或异常了，重试时需要保证退款请求号不能变更，防止该笔交易重复退款。
     * 支付宝会保证同样的退款请求号多次请求只会退一次。
     */
    @ApiModelProperty(value = "退款请求号", example = "HZ01RF001", required = false)
    private String outRequestNo;

    @ApiModelProperty(value = "退款包含的商品列表信息", required = false)
    private List<RefundGoodsDetail> refundGoodsDetail;

    /**
     * 退分账明细信息。
     * 注： 1.当面付且非直付通模式无需传入退分账明细，系统自动按退款金额与订单金额的比率，从收款方和分账收入方退款，不支持指定退款金额与退款方。
     * 2.直付通模式，电脑网站支付，手机 APP 支付，手机网站支付产品，须在退款请求中明确是否退分账，从哪个分账收入方退，退多少分账金额；
     * 如不明确，默认从收款方退款，收款方余额不足退款失败。不支持系统按比率退款。
     */
    @ApiModelProperty(value = "退分账明细信息", required = false)
    private List<OpenApiRoyaltyDetailInfoPojo> refundRoyaltyParameters;

    /**
     * 查询选项。 商户通过上送该参数来定制同步需要额外返回的信息字段，数组格式。
     */
    @ApiModelProperty(value = "查询选项", example = "[\"refund_detail_item_list\"]", required = false)
    private List<String> queryOptions;

    /**
     * 结算单号，针对账期交易，在确认结算后退款的话，需要指定确认结算时的结算单号。
     */
    @ApiModelProperty(value = "结算单号", example = "2024041122001495000530302869", required = false)
    private String relatedSettleConfirmNo;

    /**
     * Getter method for property <tt>refundAmount</tt>.
     *
     * @return property value of refundAmount
     */
    public String getRefundAmount() {
        return refundAmount;
    }

    /**
     * Setter method for property <tt>refundAmount</tt>.
     *
     * @param refundAmount value to be assigned to property refundAmount
     */
    public void setRefundAmount(String refundAmount) {
        this.refundAmount = refundAmount;
    }

    /**
     * Getter method for property <tt>outTradeNo</tt>.
     *
     * @return property value of outTradeNo
     */
    public String getOutTradeNo() {
        return outTradeNo;
    }

    /**
     * Setter method for property <tt>outTradeNo</tt>.
     *
     * @param outTradeNo value to be assigned to property outTradeNo
     */
    public void setOutTradeNo(String outTradeNo) {
        this.outTradeNo = outTradeNo;
    }

    /**
     * Getter method for property <tt>tradeNo</tt>.
     *
     * @return property value of tradeNo
     */
    public String getTradeNo() {
        return tradeNo;
    }

    /**
     * Setter method for property <tt>tradeNo</tt>.
     *
     * @param tradeNo value to be assigned to property tradeNo
     */
    public void setTradeNo(String tradeNo) {
        this.tradeNo = tradeNo;
    }

    /**
     * Getter method for property <tt>refundReason</tt>.
     *
     * @return property value of refundReason
     */
    public String getRefundReason() {
        return refundReason;
    }

    /**
     * Setter method for property <tt>refundReason</tt>.
     *
     * @param refundReason value to be assigned to property refundReason
     */
    public void setRefundReason(String refundReason) {
        this.refundReason = refundReason;
    }

    /**
     * Getter method for property <tt>outRequestNo</tt>.
     *
     * @return property value of outRequestNo
     */
    public String getOutRequestNo() {
        return outRequestNo;
    }

    /**
     * Setter method for property <tt>outRequestNo</tt>.
     *
     * @param outRequestNo value to be assigned to property outRequestNo
     */
    public void setOutRequestNo(String outRequestNo) {
        this.outRequestNo = outRequestNo;
    }

    /**
     * Getter method for property <tt>refundGoodsDetail</tt>.
     *
     * @return property value of refundGoodsDetail
     */
    public List<RefundGoodsDetail> getRefundGoodsDetail() {
        return refundGoodsDetail;
    }

    /**
     * Setter method for property <tt>refundGoodsDetail</tt>.
     *
     * @param refundGoodsDetail value to be assigned to property refundGoodsDetail
     */
    public void setRefundGoodsDetail(List<RefundGoodsDetail> refundGoodsDetail) {
        this.refundGoodsDetail = refundGoodsDetail;
    }

    /**
     * Getter method for property <tt>refundRoyaltyParameters</tt>.
     *
     * @return property value of refundRoyaltyParameters
     */
    public List<OpenApiRoyaltyDetailInfoPojo> getRefundRoyaltyParameters() {
        return refundRoyaltyParameters;
    }

    /**
     * Setter method for property <tt>refundRoyaltyParameters</tt>.
     *
     * @param refundRoyaltyParameters value to be assigned to property refundRoyaltyParameters
     */
    public void setRefundRoyaltyParameters(List<OpenApiRoyaltyDetailInfoPojo> refundRoyaltyParameters) {
        this.refundRoyaltyParameters = refundRoyaltyParameters;
    }

    /**
     * Getter method for property <tt>queryOptions</tt>.
     *
     * @return property value of queryOptions
     */
    public List<String> getQueryOptions() {
        return queryOptions;
    }

    /**
     * Setter method for property <tt>queryOptions</tt>.
     *
     * @param queryOptions value to be assigned to property queryOptions
     */
    public void setQueryOptions(List<String> queryOptions) {
        this.queryOptions = queryOptions;
    }

    /**
     * Getter method for property <tt>relatedSettleConfirmNo</tt>.
     *
     * @return property value of relatedSettleConfirmNo
     */
    public String getRelatedSettleConfirmNo() {
        return relatedSettleConfirmNo;
    }

    /**
     * Setter method for property <tt>relatedSettleConfirmNo</tt>.
     *
     * @param relatedSettleConfirmNo value to be assigned to property relatedSettleConfirmNo
     */
    public void setRelatedSettleConfirmNo(String relatedSettleConfirmNo) {
        this.relatedSettleConfirmNo = relatedSettleConfirmNo;
    }
}